home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_01_07 / 1n07059a < prev    next >
Text File  |  1990-10-12  |  6KB  |  190 lines

  1. /**********************************************************
  2.  * SAMPLE.C
  3.  * Profile Functions Demonstration 
  4.  * (c) Stuart Browning,1990
  5.  */
  6.  
  7. #define LINT_ARGS
  8. #define NOMINMAX
  9.  
  10. #include <stdlib.h>
  11. #include <stdio.h>
  12. #include <windows.h>
  13. #include "sample.h"
  14.  
  15. HANDLE    hInst;             
  16.  
  17. long FAR PASCAL MainWindowProc(HWND,unsigned,WORD,LONG);
  18. BOOL FAR PASCAL About(HWND,unsigned,WORD,LONG);
  19.  
  20. short xScreen,yScreen;
  21. int   xPos,yPos,xSize,ySize;
  22.  
  23. /***********************************************************
  24.  * WinMain()
  25.  */
  26. int PASCAL WinMain(hInstance,hPrevInstance,lpCmdLine,nCmdShow)
  27.     HANDLE hInstance;
  28.     HANDLE hPrevInstance;
  29.     LPSTR  lpCmdLine;
  30.     int nCmdShow;
  31.     {
  32.     WNDCLASS WndClass;
  33.     HWND hWnd;
  34.     MSG msg;
  35.  
  36.     hInst=hInstance;                            
  37.     /*
  38.      * Register Main Window Class
  39.      */
  40.     if (!hPrevInstance){
  41.        WNDCLASS WndClass;
  42.        WndClass.lpszClassName = (LPSTR)"MainWindow";
  43.        WndClass.hInstance     = hInstance;
  44.        WndClass.lpfnWndProc   = MainWindowProc;
  45.        WndClass.style         = CS_HREDRAW|CS_VREDRAW;
  46.        WndClass.hbrBackground = GetStockObject(LTGRAY_BRUSH); 
  47.        WndClass.hIcon         = NULL;
  48.        WndClass.lpszMenuName  = (LPSTR)"MainMenu";
  49.        WndClass.hCursor       = LoadCursor(NULL,IDC_ARROW);
  50.        WndClass.cbClsExtra    = NULL;
  51.        WndClass.cbWndExtra    = NULL;
  52.        if (!RegisterClass(&WndClass))
  53.           return(NULL);
  54.        }
  55.     /*
  56.      * Get System Metrics information
  57.      */
  58.     xScreen = GetSystemMetrics(SM_CXSCREEN);
  59.     yScreen = GetSystemMetrics(SM_CYSCREEN);
  60.     /*
  61.      * Get main form window position from WIN.INI  
  62.      */
  63.     xPos=GetProfileInt("SAMPLE","xPos",3);
  64.     yPos=GetProfileInt("SAMPLE","yPos",3);
  65.     xSize=GetProfileInt("SAMPLE","xSize",CW_USEDEFAULT);
  66.     ySize=GetProfileInt("SAMPLE","ySize",0);
  67.     /*
  68.      * Check for crazy settings in WIN.INI
  69.      */
  70.     if (xSize<(xScreen/5))
  71.         xSize=CW_USEDEFAULT;
  72.     if (ySize<(yScreen/5))
  73.         ySize=CW_USEDEFAULT;
  74.     /*
  75.      * Create Main Window
  76.      */
  77.     hWnd=CreateWindow("MainWindow",            
  78.                       "Profile Functions Demonstration",    
  79.                       WS_OVERLAPPEDWINDOW, 
  80.                       xPos,  
  81.                       yPos,  
  82.                       xSize, 
  83.                       ySize, 
  84.                       NULL,                
  85.                       NULL,                
  86.                       hInstance,           
  87.                       NULL);               
  88.     if (!hWnd)
  89.       return(NULL);
  90.     /*
  91.      * Message Loop
  92.      */
  93.     while (GetMessage(&msg,NULL,0,0)){   
  94.        TranslateMessage(&msg);
  95.        DispatchMessage(&msg);
  96.        }
  97.     return (msg.wParam);
  98.     }
  99. /**********************************************************
  100.  * MainWindowProc()
  101.  */
  102. long FAR PASCAL MainWindowProc(hWnd,message,wParam,lParam)
  103.     HWND hWnd;
  104.     unsigned message;
  105.     WORD wParam;
  106.     LONG lParam;
  107.     {
  108.     switch (message){
  109.        case WM_CREATE:
  110.             ShowWindow(hWnd,SW_SHOWNORMAL);
  111.             UpdateWindow(hWnd);
  112.             break;
  113.        case WM_COMMAND:
  114.             switch(wParam){
  115.                 case IDM_ABOUT:
  116.                      {
  117.                      FARPROC lpfn;
  118.                      lpfn=MakeProcInstance(About,hInst);
  119.                      DialogBox(hInst,"ABOUT",hWnd,lpfn);
  120.                      FreeProcInstance(lpfn);
  121.                      }
  122.                      break;
  123.                 case IDM_EXIT:
  124.                      SendMessage(hWnd,WM_CLOSE,0,0L);
  125.                      break;
  126.                 default:break;
  127.                 }
  128.             break;
  129.        case WM_ENDSESSION:
  130.        case WM_CLOSE:
  131.             SetCursor(LoadCursor(NULL,IDC_WAIT));
  132.             /*
  133.              * Save Window Position & Size 
  134.              */
  135.             if(!IsIconic(hWnd)){
  136.                char buf[10];
  137.                RECT Rect;
  138.                GetWindowRect(hWnd,&Rect);
  139.                itoa(Rect.left,buf,10);
  140.                WriteProfileString("SAMPLE","xPos",buf);
  141.                itoa(Rect.top,buf,10);
  142.                WriteProfileString("SAMPLE","yPos",buf);
  143.                xSize=Rect.right-Rect.left;
  144.                itoa(xSize,buf,10);
  145.                WriteProfileString("SAMPLE","xSize",buf);
  146.                ySize=Rect.bottom-Rect.top;
  147.                itoa(ySize,buf,10);
  148.                WriteProfileString("SAMPLE","ySize",buf);
  149.                }
  150.             DestroyWindow(hWnd);
  151.             break;
  152.        case WM_DESTROY:
  153.             PostQuitMessage(0);
  154.             break;
  155.        default:return(DefWindowProc(hWnd,
  156.                                     message,
  157.                                     wParam,
  158.                                     lParam));
  159.        }
  160.     return(NULL);
  161.     }
  162. /**********************************************************
  163.  * About()
  164.  */
  165. BOOL FAR PASCAL About(hDlg,message,wParam,lParam)
  166.    HWND hDlg;
  167.    unsigned message;
  168.    WORD wParam;
  169.    LONG lParam;
  170.    {
  171.    switch (message){
  172.         case WM_CLOSE:
  173.              SendMessage(hDlg,WM_COMMAND,ID_OK,0L); 
  174.              break;
  175.         case WM_COMMAND:
  176.              switch(wParam){
  177.                 case ID_OK:
  178.                      EndDialog(hDlg,TRUE);
  179.                      break;
  180.                 default:return(FALSE);
  181.                 }
  182.              break;
  183.         default:return(FALSE);
  184.         }
  185.     return(TRUE);
  186.     }
  187.  
  188.  
  189.  
  190.